Autor: Szymon Pawłowski

Naszym zadaniem jest przeanalizowanie zbioru danych medycznych oraz stworzenia modelu klasyfikującego potencjalnego pacjenta ze względu na fakt wystąpienia udaru mózgu.

Udar mózgu to zespół objawów klinicznych związanych z nagłym wystąpieniem ogniskowego lub uogólnionego zaburzenia czynności mózgu, powstały w wyniku zaburzenia krążenia mózgowego i utrzymującego się ponad 24 godziny.

Spis treści

Biblioteki i funkcje

powrót do spisu treści

Dane

powrót do spisu treści

Mamy łącznie 12 kolumn po 5110 obserwacji z czego jedna z nich stanowi ('stroke') zmienną celu i będziemy starać się ja zamodelować. Jest to zmienna binarna informująca czy dany pacjent miał udar mózgu czy też nie zatem jest to typowe zadanie klasyfikujące. Oprócz tego jest pozostałych 11 zmiennych:

Widzimy, że mamy 211 braków danych dla zmiennej bmi, którymi zajmiemy się w dalszej części projektu.

EDA

powrót do spisu treści

stroke

powrót do spisu treści

Widzimy, że nasza zmienna celu jest niezbalansowana gdzie klasą większościową są pacjenci bez udaru mózgu. Musimy mieć to na uwadze i w przypadku pozostawienia takiego stanu rzeczy nie możemy skorzystać z metryki accuracy, a powinniśmy skorzystać z innej - przykładowo średniej harmonicznej między precision a recall czyli f1-score. Niezbalansowany zbiór danych jest jednak dość problemtyczny, gdyż klasyfikator ma tendencję skupiania się na predykcji klasy większościowej.

Istnieją sposoby na zbalansowanie zbioru danych, które są częścią pre-processingu czyli wstępnego przetwarzania danych przed modelowaniem. Do jednych z bardziej popularnych metod należą:

W przypadku undersamplingu możemy pozbyć się istotnych informacyjnie obserwacji. Dodatkowo nasz zbiór danych jest niewielki, więc nie chcielibyśmy się ograniczyć do zaledwie 249 obserwacji. Natomiast oversampling może doprowadzić do nadmiernego dopasowania modelu do naszych danych. Istnieje też podejście mieszane wykorzystujące zarówno undersampling, jak też oversampling ale ciężko jest ustalić optymalną proporcję między podejściami. Spróbujemy sprawdzić empirycznie najlepszą metodę i się do niej ograniczyć oczywiście opierając się nie o zwykłe próbkowanie, a dostępne i znane algorytmu balansowania zbiorów danych.

id

powrót do spisu treści

W naszym zbiorze danych każdy pacjent jest wpisany unikalnie, tak więc zmienna ID raczej do niczego więcej nam się nie przyda i będziemy mogli ją pozostawić w dalszych etapach.

gender

powrót do spisu treści

W zmiennej gender występują 3 wartości (male, female, other). Wartość 'Other' występuje tylko jeden raz, więc można go potraktować jako brak danych. W zależności od wartości pozostałych zmiennej dla tej obserwacji albo zastąpimy ją wartością male lub female (jako tą która najczęściej występuje) albo usuniemy.

age

powrót do spisu treści

Możemy zaobserwować, że udar mózgu w naszym zbiorze mają głównie osoby w podeszłym wieku (60-80 lat). Natomiast osoby bez udaru rozkładają się dość równomiernie, mediana wynosi 43 lata, gdzie dla osób z udarem 71 lat. Dodatkowo występują zmienne odstające w grupie ludzi z udarem. Sam rozkład zmiennej zbliżony jest do rozkładu jednostajnego z "grubym" oszacowaniem.

hypertension

powrót do spisu treści

Można zauważyć, że znaczna większość pacjentów nie ma nadciśnienia. Co więcej, mimo braku zbalansowanego zbioru danych, więcej pacjentów z udarem mózgu nie miało przy tym nadciśnienia.

heart_disease

powrót do spisu treści

Podobna sytuacja jak dla zmiennej hypertension. Znaczna większość pacjentow nie ma chorób serca oraz mimo braku zbalansowania, większość osób z udarem także nie ma chorób serca.

ever_married

powrót do spisu treści

Zmienna ever_married jest zmienną kategoryczną, którą będzie trzeba zakodować w wartości (0,1). Większa część pacjentów była kiedykolwiek żonata oraz to w tej grupie udar mózgu występuje w większej ilości.

work_type

powrót do spisu treści

Zmienna work_type określająca rodzaj wykonywanej pracy jest także zmienną kategoryczną, którą zakodujemy w wartości numeryczne. Najwięcej pacjentów jest z kategorii 'private', następnie równiemiernie ilościowo rozłożeni między 'children', 'self_employed', 'govt_job'. Znikoma ilość nigdy nie pracowała. Największa ilość udarów znajduje się wśród sektora prywatnego oraz samo-zatrunionego. Niewielka część w sektorze publicznym. Pojedyncze wartości występują też w grupie dzieci, ale z poprzednich wniosków najprawdopodobniej są to obserwacje odstające. Można także spróbować zkoszykować tą zmienną i rozdzielić na sektor obciążony i nieobciążony względem ryzyka udaru mózgu.

residence_type

powrót do spisu treści

Zmienna określa obszar zamieszkania z rozdziałem na wiejski i miejski. Widać, że podział jest równomierny oraz w każdym z podziałów jest zbliżona proporcja osób po udarze do osób bez udaru mózgu, więc zmienna ta niesie ze sobą najpewniej niewielką ilość informacji dla potencjalnego modelu.

avg_glucose_level

powrót do spisu treści

Możemy zaobserwować, że najwięcej jest pacjentów ze średnim poziomem glukozy w przedziale 77.24 - I kwantyl, 114.09 - II kwantyl, a więc z poziomem prawidłowym lub stanem przedcukrzycowym. Wniosek ten jednak jest uogólniony, gdyż zakres ten jest nieco inny w zależności od pory czy też sposobu wykonywanego badania, a także wieku badanej osoby. Osoby z wyższym średnim poziomem glukozy we krwi są outlierami dla grupy bez udaru mózgu, natomiast dla pozostałej części osób mieszczą się one w IV kwantylu. Więc usunięcie tych obserwacji, lub też zmiana ich wartości spowodowałaby utratę być może znaczącej informacji. Zamiast tego spróbujemy wykorzystać tą zależność tworząc nową zmienną kategoryczną informującą o średnim zakresie glukozy (poziom prawidłowy, stan przedcukrzycowy, cukrzyca) oraz imputując nowe wartości, jak też transformując całą zmienną.

bmi

powrót do spisu treści

Rozkład zmiennej bmi przypomina rozkład normalny z cięższym prawym ogonem. Występują też outliery dla bmi > 47.5. Większość pacjentów zawiera się w przedziale 23.5 - 33.1 czyli jest z wagą prawidłową lub nadwagą I stopnia. O ile sama zmienna może nie nieść zbyt dużej informacji z uwagi, że rozkład wartości jest zbliżony dla osób z udarem, jak i bez udaru to niemniej możliwe są pewne istotne interakcje między pozostałymi zmiennymi jak chociażby średnim poziomem glukozy we krwi. W kontekście danych odstających również można stworzyć zmienną kategoryczną zgodnie z kategoriami wskaźników BMI.

Dodatkowo zmienna BMI zawiera braki danych, którymi należy się zająć. Istnieje na to wiele metod m.in.

Z racji, iż braków danych jest niewiele (zaledwie 4%) to wypełnimi ich statystyką opisową jako działaniem prostym, ale i skutecznym. Jak wspomniano, rozkład zmiennej jest zbliżony do normalnego więc nie ma większego znaczenia wybór między medianą, a średnią ale zważywszy na lekki ogon prawostronny wybrana zostanie mediana. Dla obserwacji odstających posłużymy się metodą IQR.

smoking_status

powrót do spisu treści

Ciężko wyciągnać tu szersze wnioski zważywszy na dość liczną grupę 'Unknown', Najliczniejsza grupa pacjentów nigdy nie paliła papierosów zakładając, że w grupie 'Unknown' wartości rozkładałyby się w miare równomiernie. Widać rozróżnienei dla osób z udarem, że w większości są to osoby niepalące lub palące sporadycznie. Sprawdźmy wiek osób dla grupy Unknown, być może w naturalny sposób wydzieli nam się grupa osób niepełnoletnich.

Widzimy, że dla osób niepełnoletnich wartość smoking_status jest w większości równa 'Unknown'. Należy coś z tą grupą osób zrobić, jednakże nie można po prostu usunąć tych obserwacji, gdyż udar mózgu dotyczyć może także dzieci. Z jednej strony można zaklasyfikować te osoby do grupy 'Never smoked', jednak jest wysoce prawdopodobne, że w rzeczywistości część osób może 'popalać'. Stworzymy więc nową kategorię 'Underage' dla tych pacjentów.

Inżynieria cech

powrót do spisu treści

W inżynierii cech będziemy tworzyli nowe zmienne z już istniejących, zajmowali się brakiem danych czy też odstającymi obserwacjami. Do tego ostatniego skorzystamy z metody rozstępu międzyćwiartylkowego IQR. Jest to różnica między trzecim a pierwszym kwartylem. Ponieważ pomiędzy tymi kwartylami znajduje się z definicji 50% wszystkich obserwacji (położonych centralnie w rozkładzie), dlatego im większa szerokość rozstępu ćwiartkowego, tym większe zróżnicowanie cechy. Dodatkowo na końcu dokonamy balansowania naszego zbioru z wykorzystaniem 4 technik: SMOTE, SMOTE+Tomek, SMOTE ENN.

bmi

powrót do spisu treści

Możemy zaobserwować, że wypełnienie braków danych spowodowało peak w punkcie mediany co jest naturalnym efektem zastosowanej metody.

Dodatkowo, najbardziej liczna jest grupa osób z nadwagą i to tam również najliczniej występują osoby z udarem mózgu. W przypadku usunięcia outlierów mozemy zaobserwować pozbycie się ogona prawostronnego, natomiast zastosowanie log-transformacji wydaje się nie mieć znacznego wpływu poza przeskalowaniem co będzie zbędne z racji iż w późniejszym etapie będziemy dokonywać standaryzacji zmiennych, dlatego odrzucimy tą zmienną.

Co więcej, możemy zauważyć, że przypisanie granicznych wartości kwantylowych nie zlikwidowało danych odstających w grupie osób z udarem. W tej sytuacji możemy usunąć obserwacje specjalnie dla tej grupy, ale nie są to pojedyncze przypadki a i tak jest ona mało liczna. W takim razie, z racji dalszego lekkiego zaszumienia zmiennej przez te obserwacje, pozostaniemy przy zmiennej kategorycznej koszykującej do odpowiedniej grupy. Jest to dość powszechne rozwiązanie dla BMI, gdyż to powszechny indeks wagi ciała.

gender

powrót do spisu treści

age

powrót do spisu treści

ever_married

powrót do spisu treści

work_type

powrót do spisu treści

residence_type

powrót do spisu treści

avg_glucose_level

powrót do spisu treści

Najbardziej liczna jest grupa osób z prawidłowym kategorią średniego poziomu glukozy we krwi i to tam również najliczniej występują osoby z udarem mózgu (zaliczono tam także I stopień otyłości).

W kontekście kategoryzacji zmiennej otrzymano raczej spadek informacji, gdyż została jedna najliczniejsza grupa osób z udarem oraz pozostałe z podobną licznością. Co więcej, jak wspomniano, ciężko jednoznacznie wpisać w kategorie gdyż nie znamy właściwości pomiaru cukru, jak też dodatkowych chorób pacjentów takich jak cukrzyca.

Widzimy także, że metoda IQR z imputacją zamiast usunięcia danych dalej zachowała pewne dane odstające. Jednakże przy skorzystaniu z log-transformacji, są to nieliczne wartości mocno zbliżone do wartości górnej. Mając to na uwadze, jak też fakt spadku informacji po kategoryzacji ograniczymy się do tej zmiennej.

smoking_status

powrót do spisu treści

W dalszym ciągu grupa Unknown jest dość liczna, ale wydobyliśmy za to bardziej zróżnicowany podział i pozostawimy to w ten sposób. Dzięki temu możemy dostrzec, że w prawie każdej grupie mamy równy proporcję osób z udarem, jak też bez udaru. Nie jest to zbyt informacyjna zmienna wyszczególniająca informację na temat pacjentów z udarem. Moglibyśmy tutaj wyodrebnić grupę 'underage', a pozostałe zagregować otrzymując zmienną binarną, jednak będzie ona opierała się tak naprawdę tylko na wieku, a nie na rzeczywistym statusie palenia. Odrzucimy więc tą zmienną w dalszej analizie.

Analiza korelacji

powrót do spisu treści

Widoczna jest słaba korelacja między zmiennymi oraz między zmiennymi, a zmienną celu. Największe wartości widoczne są przy tych samych zmiennych, ale po przeprowadzeniu transformacji lub kodowania co jest rezultatem oczywistym - jedynie zmienna is_married koreluje ze zmienną age ale nie będziemy jednak wykluczać żadnej z nich. Nie występuje więc tutaj problem współliniowości. Ciężko także na tej podstawie dokonać selekcji zmiennych, więc raczej skorzystamy w późniejszym etapie z regularyzacji LASSO.

Polynomial Features

powrót do spisu treści

Bardzo często wejściowe zmienne są interaktywne ze sobą w sposób nieliniowy. Takie interkacje mogą zostać później wykryte i wykorzystane przez model przy etapie selekcji zmiennych. Co więcej, podniesienie niektórych zmiennych do pewnej potęgi może pomóc w wyodrębnieniu istotnych relacji między tą zmienną, a zmienną celu. Przeważnie wystarczy podniesienie do stopnia drugiego (ewentualnie trzeciego), gdyż wielomiany stopnia czwartego i wyższego są nadmiernie elastyczne, mają nieregularne kształty i mogą prowadzić do overfittingu. My wykorzystamy cechy wielomianowe stopnia drugiego.

Jak widzimy uzyskaliśmy wszystkie możliwe kombinacje zmiennych wielomianowych 2-giego stopnia. Wykluczymy jednak na start zmienne, których z pewnością nie wykorzystamy takie jak bias: '1' oraz zmienne binarne podniesione do kwadratu, jak też zmienne z interakcją 'stroke' w celu uniknięcia tzw. data leakage.

Balansowanie zbioru

powrót do spisu treści

Ważne jest, aby balansować dane tylko na zbiorze treningowym, gdyż w ogólności zbiór testowy jest zbiorem, który ma odzwierciedlać realne dane - a te zbalansowane nie są.

SMOTE

powrót do spisu treści

SMOTE wykorzystuje podejście algorytmiczne KNN tj. dla każdej obserwacji $x$ wybiera $k$ najbliższych sąsiadów i wybiera losowo jednego $x'$ z nich. Następnie różnica między koordynatami $x$ oraz $x'$ jest obliczana i przemnożona losowo przez liczby z przedziału $(0,1)$. Tak stworzona z różnic obserwacja $x''$ jest dodana do zbioru. Geometrycznie odwzorowuje to stworzenie nowej obserwacji na podstawie przesunięcia obserwacji bieżącej do jednego z sąsiadów.

SMOTE+Tomek

powrót do spisu treści

SMOTE + Tomek jest techniką hybrydową, która łączy technikę oversamplingu algorytmu SMOTE z techniką undersamplingu algorytmu Tomek. Po zastosowaniu SMOTE'a istnieje możliwość nakładania się klastrów klas co może skutkować w overfittingu. Wówczas użyty zostaje dodatkowo algorytm Tomek, który polega na sparowaniu ze sobą próbek z różnych klas, a następnie obserwacji z klasy większościowej zostają usunięte w celu (niekiedy z obydwu) wyraźniejszej separacji klas.

SMOTE + ENN

powrót do spisu treści

SMOTE + ENN jest techniką hybrydową, która polega na dodatkowym usunięciu pewnej liczby obserwacji z przestrzeni cech. Gdy zbiór zostanie poddany oversamplingu przez SMOTE to następnie zostaje zastosowana technika ENN, która jest techniką undersamplingu. ENN (Edited Nearest Neighbor) polega na odnalezieniu najbliższych K-sąsiadów każdej z obserwacji. Następnie sprawdza czy klasa większościowa tych sąsiadów jest zgodna z klasą danej obserwacji, jeśli nie to zarówno obserwacja jak i sąsiedzi zostają usunięci. Dzięki takiemu podejściu oddzielenie klas od siebie jest wyraźniejsze, aniżeli w pozostałych przypadkach.

Widzimy, że każdy z algorytmów balansuje w specyficzny dla siebie sposób generuje sztuczne obserwacje dla klasy mniejszościowej. W algorytmie SMOTE ENN widać dodatkowo zmalenie liczby obserwacji za sprawą wyraźnej techniki undersamplingu. Przeprowadzimy trenowanie modeli na każdym ze zbiorze dla każdego z modeli, aby mieć szerszy widok na rezultaty. Co więcej dla każdego z nich przeprowadzimy także regularyzację LASSO.

Metryki

powrót do spisu treści

W ogólności dla oceny rozwiązań problemów klasyfikacyjnych korzysta się z macierzy pomyłek. image.png

Zestawia ona rzeczywiste wartości klas z wartościami klas zamodelowanymi. W przypadku binarnym można to przedstawić w postaci TP czyli przypadki zaklasyfikowane prawidłowo do klasy prawdziwej, TN czyli przypadki zaklasyfikowane prawidłowo do klasy fałszywej, FP czyli przypadki zaklasyfikowane nieprawidłowo do klasy prawdziwej oraz FN czyli przypadki zaklasyfikowane nieprawidłowo do klasy fałszywej. Wartości FP są tzw. błędem I typu, czyli zaklasyfikowaniem czegoś jako prawdziwe, gdy w rzeczywistości takie nie jest. Z kolei wartości FN są błędem II typu, czyli zaklasyfikowaniem czegoś jako nieprawdziwe, gdy w rzeczywistości prawdziwe jest.

Z takiego zestawienia najpopularniejsze są metryki:

W naszym przypadku chcemy się skupić na minimalizacji błędu II typu kosztem błędu typu I. Wynika to z faktu, iż w przypadku popełnienia błędu I typu czyli nieprawdziwej predykcji udaru mózgu mogą zostać wykonane niepotrzebne badania oraz poniesione środki finansowe, natomiast w przypadek błędu II typu niesie poważne konsekwencje zdrowotne a w najgorszym przypadku śmierć.

Nie wystarczy jednak minimalizacja FN, ponieważ w takim przypadku każdy kolejny pacjent byłby klasyfikowany jako osoba z udarem mózgu. Potrzebne jest pewne wyważenie między FP, a FN dlatego kierować się będziemy metrykami Precision - czyli ile osób zaklasyfikowanych z udarem rzeczywiście ma udar (wysoka wartość precyzji implikuje niską wartość FP) oraz Recall (wysoka wartość recall implikuje niską wartość FN), jak też ich średnią harmoniczną $F_1$.

Podsumowując, dla klasy pacjentów z udarem bardziej istotna jest metryka Recall, która informuje nas jaka jest proporcja osób zaklasyfikowanych z udarem do wszystkich osób, które zaklasyfikowane być powinny. Oczekujemy wysoką wartość, gdyż oznaczać to będzie że prawidłowo wyszukujemy osoby z udarem.

Dla pacjentów bez udaru bardziej patrzeć będziemy na metrykę Precision, która z kolei mówi nam ile zaklasyfikowanych jako osoby bez udaru rzeczywiście udaru nie mają. Wysoka wartość będzie oznaczać, że precyzyjnie wyszukujemy osoby bez udaru.

Modelowanie

powrót do spisu treści

W naszym zestawie danych występuje wiele zmiennych po wprowadzeniu polynomial features. O ile w trakcie preprocessingu danych nie usunęliśmy ich zbyt wiele i wciąż liczba zmiennych jest o wiele mniejsza od liczby obserwacji to wciąż nadmierna ich ilość prowadzić może do zjawiska overfittingu, wpływać na wyjaśnialność, czy też wprowadzać niepotrzebny szum do modelu.

Dlatego też chcemy tą liczbę zredukować poprzez wybranie naijstotniejszych zmiennych (chociaż możliwe są inne sposoby jak redukcja wymiarowości przykładowo poprzez PCA).

Wytrenujemy 3 modele:

  1. Regresje logistyczną

  2. SVM czyli maszyne wektorów nośnych.

  3. RandomForest

Każdy z modeli zostanie wytrenowany po wcześniejszej selekcji cech z wykorzystaniem regresji logistycznej z regularyzacją LASSO. Regularyzacja ta zeruje pewne współczynniki i zostanie ona wytrenowana przy wykorzystaniu kilku parametrów regularyzujących spośród których wybrany zostanie najlepszy dla metryki ROC AUC.

Po wybraniu tych zmiennych, wytrenujemy na tym wyselekcjowanym zbiorze wszystkie modele wraz z przeszukaniem siatki hiperparametrów każdego z nich maksymalizując wynik ROC AUC co pomoże nam w doborze ostatecznego modelu.

W ostatnim kroku przejdziemy do doboru thresholdu $p$, czyli wartości prawdopodobieństwa od którego klasyfikować będziemy pacjentów z udarem. Dla regresji logistycznej oraz RFC jest to naturalne, gdyż metody te są z natury probabilistyczne a ich algorytmy zwracają wartości prawdopodobieństw klasyfikacji. Dla SVM możemy ustawić wartość hiperparametru probability=True, dzięki czemu jesteśmy w stanie pozyskać owe prawdopodobieństwa.

Całość odbywa się za scenami przy wykorzystaniu regresji logistycznej na danych wynikach SVM (algorytm Platta). Technika ta nie jest do końca wiarygodna i ma zastrzeżenia, mianowicie:

W kontekście zastrzeżeń ustawiając własny threshold będziemy to w pewien sposób kontrolować tym samym ograniczając efektywność działania samego algorytmu SVM, a skupiając się na skuteczności działania techniki Platta w estymacji tych prawdopodobieństw.

Wybór techniki balansowania

powrót do spisu treści

Dla ogólnego spojrzenia spoglądamy na metrykę 'macro-avg' jako, że nie uwzględnia proporcji klas (pod kątem liczby wystąpień), a chcemy aby klasa 'Stroke' była tak samo ważna w ocenie modelu.

Tak też dla:

W ogólności widać, że model sprawuje się całkiem dobrze bez przeprowadzenia preprocessingu oraz doboru hiperparametrów. W naszym przypadku wybór metody balansowania danych raczej nie jest zbyt istotny, ale dobrano 3 możliwości w celu pokazania różnych technik jak też pewnego wpływu na ewentualne wyniki. Tutaj różnice są naprawdę niewielkie, ale z racji na wyższe wartości, jak też niższe różnice względem zbioru treningowego i testowego wybierzemy metodą hybrydową SMOTE+ENN.

Selekcja zmiennych przy użyciu LASSO

powrót do spisu treści

Do selekcji zmiennych wykorzystamy metodę LASSO w tym przypadku będzie to regresja logistyczna z funkcją kary w metryce L1. Przeszukamy siatkę parametrów regulujących C (im niższa wartość tym bardziej restrykcyjna funkcja kary). Będziemy maksymalizować wynik ROC AUC, czyli maksymalizować ilość prawdziwych pozytywnych predykcji przy jednoczesnej minimalizacji negatywnych predykcji. Następnie z najlepszego estymatora wybierzemy odpowiednie zmienne przy użyciu modułu SelectFromModel.

Widzimy, że żadna zmienna nie została "usuniętą" przez LASSO poprzez przypisanie zerowej wagi.

Hyperparameters tuning

powrót do spisu treści

Ostatnim etapem będzie dostrojenie hiperparametrów dla każdego z modeli. W regresji logistycznej dobierzemy wartości parametru $C$ odpowiadającego za regularyzację. Dla SVM wypróbujemy inne wartości gamma, $C$ oraz jądro liniowe. Dla RFC stworzymy przestrzeń hiperparametrów uwzględniającą m.in. głębokość drzewa. Wykorzystamy do tego GridSearchCV z pakietu sklearn. Metryką, którą będziemy optymalizować będzie metryka ROC AUC, która odzwierciedla wartości przedstawione na powyższym wykresie. Im wyższa wartość AUC tym wyższy odsetek klsayfikacji prawdziwie pozytywnych przy niskim odsetku klasyfikacji fałszywie pozytywnych. Ta metryka pozwala dobrze zestawiać ze sobą modele oraz podobnie jak poprzednie obrane - poprawnie odzwierciedla nasz cel.

Otrzymaliśmy więc 3 modele z najlepszymi parametrami pod względem metryki ROC AUC z przeszukiwanych siatek parametrów. Teraz zestawimy je ze sobą.

Widzimy, że spośród najlepszych estymatorów dla wybranej przestrzeni parametrów najlepszy wynik osiąga regresja logistyczna. Z kolei SVM oraz RFC sprawują się niewiele lepiej jak bazowy estymator czyli predykujący z prawdopodobieństwem 50%. To tak jakbyśmy typowali czy ktoś ma udar rzutem monetą - SVM i RFC sprawują się tylko niewiele lepiej dla tego scenariusza. Ograniczymy się więc do regresji logistycznej i sprawdzimy czy wybór thresholda $p$ wpłynie na nasz wynik.

Wybór thresholdu $p$

powrót do spisu treści

Wnioski dla:

Jak wspomnieliśmy na początku, chcemy maksymalizować wartość Precyzji dla klasy bez udaru (0) oraz Recall dla klasy z udarem (1). Dodatkowo wysokie wartości Precyzji dla klasy (1) oraz Recall dla klasy (0) będą atutem.

Od wartości $p=0.2$ dla LR możemy zaobserwować mocny spadek Recall dla klasy z udarem. W punkcie spadku dla klasy (0) wartość precyzji jest relatywnie wysoka, a dla klasy (1) następuje niewielki spadek względem Recall. Dodatkowo niskie wartości $p$ mają niskie różnice metryk między zbiorem treningowym a testowym. Są też zgodne z "wyczuciem dziedzinowym" tj. chcemy być bardziej uważni na możliwość wystąpienia udaru i raczej wystarczy nam już niewielkie prawdopodobieństwo wystąpienia, aby zaklasyfikować pacjenta. Co prawda wzrasta ryzyko nieprawidziwej klasyfikacji, ale w najgorszym przypadku zostaną poniesione niepotrzebne koszty (z takiej racji nie może być to też wartość zbyt niska, gdyż prawie każdego od razu będziemy klasyfikować jako osobę z udarem). Z drugiej strony zbyt wysoka wartość wymaganego prawdopodobieństwa może narazić zdrowie, a nawet życie ludzkie (widać to chociażby po drastycznym spadku Recall dla klasy 1 co oznacza, że mocno wzrosła liczba osób zaklasyfikowanych jako bez udaru, gdzie w rzeczywistości on wystąpił).

Interesują nas wartości $p \in (0.2, 0.3)$, ponieważ mają wysokie wartości metryk Precision dla klasy (0) oraz Recall dla klasy (1), które ustaliliśmy na początku. Jednocześnie są to momenty, w których wartość Precision dla (1) oraz Recall dla (0) zaczyna wzrastać wraz z $F_1$ score.

Wartość $p=0.1$ klasyfikowałaby prawie każdego jako pacjenta z udarem co jest niepożądanym efektem i do takich wniosków nie jest potrzebny żaden model. Z kolei w wartościach $p > 0.3$ widzimy mocny spadek Recall dla klasy 1, a więc tracimy pewność że wszyscy pacjencji z udarem, którzy winni być zaklasyfikowani rzeczywiście zostali przypisani do tej klasy.

Zostaje decyzja między wyższymi wartościami ustawionych apriori metryk, a pewną intuicją dziedzinową, gdyż dla $p=0.2$ również istnieje ryzyko klasyfikacji zbyt wielu "zdrowych" pacjentów. Sprawdźmy więc wartości AUC dla tych dwóch parametrów, które poinformują nas jaki scenariusz maksymalizuje TPR przy minimalnej ilości FPR.

Jak możemy zauważyć, potwierdziły się intuicje wypisane w poprzednim komentarzu.

Osiągnęliśmy wartość $AUC=0.7652$ dla $p=0.2$ co jest lepszym wynikiem od domyślnej wartości parametru $p=0.5$, dla której $AUC=0.7314$, więc jest pewna poprawa modelu. Widzimy również fakt, że wysokie wartości metryk wybranych apriori słusznie maksymalizują wartość AUC przy czym widocznie uwzględniają ryzyko klasyfikowania większości pacjentów jako osoby z udarem. Ewidentnie jest to dobry kierunek w przypadku niezbalansowanego zbioru jak nasz.

Dla $p=0.3$ mamy $AUC=0.7521$ co także nie jest złym wynikiem i po konsultacji ze specjalistą być może zostałby wybrany, gdyż przypisuje klasę z wyższym poziomem prawdopodobieństwa.

Widać również jak ze wzrostem parametru $p$ maleje wartość $AUC$.

Ostatecznie dobieramy wartość $p=0.2$ jako wartość naszego głównego modelu. Ostatnim etapie przygotujemy cały gotowy pipeline do predykcji udaru.

Przykładowy pipeline

powrót do spisu treści

Dodatkowe źródła